package top.hymsk.ecommerce.service.information.messages.impl;


import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.tea.TeaException;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.Common;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import top.hymsk.ecommerce.config.MessageConfig;
import top.hymsk.ecommerce.service.information.messages.MessageClient;

/**
 * @author 花于陌上开
 */
@Component
public class MessageClientImpl implements MessageClient {
    // 生成Client
    com.aliyun.dysmsapi20170525.Client client;


    /**
     * 短信Client生成
     */
    public MessageClientImpl(@Autowired MessageConfig messageConfig) {
        String accessKeyId = messageConfig.getAccessKeyId();
        String accessKeySecret = messageConfig.getAccessKeySecret();
        Config config = new Config()
                // 必填，您的 AccessKey ID
                .setAccessKeyId(accessKeyId)
                // 必填，您的 AccessKey Secret
                .setAccessKeySecret(accessKeySecret)
                // 访问的域名
                .setEndpoint("dysmsapi.aliyuncs.com");
        try {
            client = new com.aliyun.dysmsapi20170525.Client(config);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }


    private Integer send(com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest, com.aliyun.teautil.models.RuntimeOptions runtime) {
        try {
            // 复制代码运行请自行打印 API 的返回值
            SendSmsResponse res = client.sendSmsWithOptions(sendSmsRequest, runtime);
            return res.statusCode;
        } catch (TeaException error) {
            // 如有需要，请打印 error
            Common.assertAsString(error.message);
            error.printStackTrace();
            return error.statusCode;
        } catch (Exception e) {
            TeaException error = new TeaException(e.getMessage(), e);
            // 如有需要，请打印 error
            Common.assertAsString(error.message);
            error.printStackTrace();
            return error.statusCode;
        }
    }

    /**
     * 发送验证码(仅有数字&有效期15分钟)
     * 模板：您的验证码：${code}(动态验证码)，有效期15分钟 ，请勿将验证码告诉他人。
     *
     * @param phoneNumber 接收电话
     * @param code        验证码
     * @return 发送状态
     */
    @Override
    public Integer sendMessageWithAllNumberCode(String phoneNumber, String code) {
        // 生成Client
        com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
                .setSignName("hymsk")
                .setTemplateCode("SMS_460761195")
                .setPhoneNumbers(phoneNumber)
                .setTemplateParam("{\"code\":\"" + code + "\"}");
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        return send(sendSmsRequest, runtime);
    }

    /**
     * 发送验证码(仅有数字字母组合&有效期15分钟)
     * 模板：您的验证码：${code}(动态验证码)，有效期15分钟 ，请勿将验证码告诉他人。
     *
     * @param phoneNumber 接收电话
     * @param code        验证码
     * @return 发送状态
     */
    @Override
    public Integer sendMessageWithMixtureCode(String phoneNumber, String code) {
        // 生成Client
        com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
                .setSignName("hymsk")
                .setTemplateCode("SMS_460835228")
                .setPhoneNumbers(phoneNumber)
                .setTemplateParam("{\"code\":\"" + code + "\"}");
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        return send(sendSmsRequest, runtime);
    }

    /**
     * 发送任务提醒消息
     * 模板：尊敬的${name}用户，${task}任务已经${describe}，请注意及时处理。
     *
     * @param phoneNumber 接收电话
     * @param name        用户名
     * @param task        任务名
     * @param describe    任务状态描述
     * @return 发送状态
     */
    @Override
    public Integer sendMessageWithRemind(String phoneNumber, String name, String task, String describe) {
        // 生成Client
        com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
                .setSignName("hymsk")
                .setTemplateCode("SMS_460751199")
                .setPhoneNumbers(phoneNumber)
                .setTemplateParam("{\"name\":\"" + name + "\",\"task\":\"" + task + "\",\"describe\":\"" + describe + "\"}");
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        return send(sendSmsRequest, runtime);
    }
}